using System;
using System.Collections.Generic;
using System.Web.UI.WebControls;
using SIP.PN.FrontEnd.Code;
using SIP.PN.FrontEnd.controles;
using SIP.PN.Servicios.Interfaces.DTO;

namespace SIP.PN.FrontEnd
{
    public partial class EvaluarTareaOperarios : PaginaCrud<ProyectoTareaDTO>
    {
        #region Propiedades

        private int CodigoProyecto
        {
            get { return (int)ViewState["CodigoProyecto"]; }
            set { ViewState["CodigoProyecto"] = value; }
        }

        private int CodigoTrabajo
        {
            get { return (int)ViewState["CodigoTrabajo"]; }
            set { ViewState["CodigoTrabajo"] = value; }
        }

        private int CodigoTarea
        {
            get { return (int)ViewState["CodigoTarea"]; }
            set { ViewState["CodigoTarea"] = value; }
        }

        #endregion

        #region Metodos

        public override void Inicializar()
        {
            cabecera.SetearMenuSolapa(MenuSolapas.Proyecto);

            CodigoProyecto = Convert.ToInt32(ObtenerParametro<string>("CodigoProyecto"));
            CodigoTrabajo = Convert.ToInt32(ObtenerParametro<string>("CodigoTrabajo"));
            CodigoTarea = Convert.ToInt32(ObtenerParametro<string>("CodigoTarea"));
            ProyectoTareaDTO entidad = SrvProyecto.ObtenerProyectoTarea(CodigoProyecto, CodigoTrabajo, CodigoTarea);

            if (entidad != null)
                CargarFormulario(entidad);
        }

        public override void Seguridad()
        {
            cabecera.VisibilidadBotonNuevo = false;
            cabecera.VisibilidadBotonBuscar = false;
            cabecera.VisibilidadBotonGuardar = true;
            cabecera.VisibilidadBotonCancelar = true;
            cabecera.VisibilidadBotonVolver = false;
            cabecera.VisibilidadBotonExportar = false;
            cabecera.VisibilidadBotonAyuda = true;
        }

        public override void CargarFormulario(ProyectoTareaDTO entidad)
        {
            lbl_titulo.Text = "Evaluar Tarea - " + entidad.Nombre;
            IList<EvaluacionDTO> evaluaciones = SrvProyecto.ListarProyectoTareaAsignacionEvaluacion(CodigoProyecto, CodigoTrabajo, CodigoTarea);
            rep_evaluaciones.DataSource = evaluaciones;
            rep_evaluaciones.DataBind();
        }

        public override void Guardar()
        {
            try
            {
                foreach (RepeaterItem item in rep_evaluaciones.Items)
                {
                    Repeater rep_conceptos = (Repeater)item.FindControl("rep_conceptos");
                    int codigo = Convert.ToInt32(((HiddenField)item.FindControl("hdf_codigo")).Value);
                    IEnumerable<EvaluacionConceptoDTO> conceptos = ObtenerConceptos(rep_conceptos);
                    SrvProyecto.EvaluarProyectoTareaAsignacion(CodigoProyecto, CodigoTrabajo, CodigoTarea, codigo, conceptos);
                }
                Cancelar();
            }
            catch (Exception ex)
            {
                cuv_evaluaciones.IsValid = false;
                cuv_evaluaciones.ErrorMessage = ex.Message;
            }
        }

        public override void Cancelar()
        {
            AgregarParametro("CodigoProyecto", CodigoProyecto.ToString());
            AgregarParametro("CodigoTrabajo", CodigoTrabajo.ToString());
            AgregarParametro("CodigoTarea", CodigoTarea.ToString());
            AgregarParametro("Accion", Acciones.Editar);
            Response.Redirect("CrudProyectoTarea.aspx");
        }

        private static IEnumerable<EvaluacionConceptoDTO> ObtenerConceptos(Repeater rep_conceptos)
        {
            List<EvaluacionConceptoDTO> r = new List<EvaluacionConceptoDTO>();
            foreach (RepeaterItem item in rep_conceptos.Items)
            {
                HiddenField codigo = (HiddenField)item.FindControl("hdf_codigoConcepto");
                Literal titulo = (Literal)item.FindControl("lbl_tituloConcepto");
                RadioButtonList tildes = (RadioButtonList)item.FindControl("rbl_tildes");
                r.Add(new EvaluacionConceptoDTO(codigo.Value, titulo.Text, SrvProyecto.EvaluacionCalcularPuntaje(Convert.ToInt32(tildes.SelectedValue))));
            }
            return r;
        }

        #endregion

        #region Eventos

        protected void cabecera_OnBuscarClick(object sender, EventArgs e)
        {
            Cancelar();
        }

        protected void cabecera_OnGuardarClick(object sender, EventArgs e)
        {
            Guardar();
        }

        protected void cabecera_OnCancelarClick(object sender, EventArgs e)
        {
            Cancelar();
        }

        protected void lnk_proyecto_Click(object sender, EventArgs e)
        {
            AgregarParametro("Codigo", CodigoProyecto.ToString());
            AgregarParametro("Accion", Acciones.Editar);
            Response.Redirect("CrudProyecto.aspx");
        }

        protected void lnk_trabajo_Click(object sender, EventArgs e)
        {
            AgregarParametro("CodigoProyecto", CodigoProyecto.ToString());
            AgregarParametro("CodigoTrabajo", CodigoTrabajo.ToString());
            AgregarParametro("Accion", Acciones.Editar);
            Response.Redirect("CrudProyectoTrabajo.aspx");
        }

        protected void lnk_tarea_Click(object sender, EventArgs e)
        {
            AgregarParametro("CodigoProyecto", CodigoProyecto.ToString());
            AgregarParametro("CodigoTrabajo", CodigoTrabajo.ToString());
            AgregarParametro("CodigoTarea", CodigoTarea.ToString());
            AgregarParametro("Accion", Acciones.Editar);
            Response.Redirect("CrudProyectoTarea.aspx");
        }

        protected void rep_evaluaciones_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            EvaluacionDTO evaluacion = e.Item.DataItem as EvaluacionDTO;
            if (evaluacion != null)
            {
                HiddenField codigo = (HiddenField)e.Item.FindControl("hdf_codigo");
                RadioButtonList tildes = (RadioButtonList)e.Item.FindControl("rbl_tildesglobales");
                Repeater conceptos = (Repeater)e.Item.FindControl("rep_conceptos");
                codigo.Value = evaluacion.Codigo;
                tildes.SelectedValue = SrvProyecto.EvaluacionCalcularTilde(evaluacion.Puntaje).ToString();
                conceptos.DataSource = evaluacion.Conceptos;
                conceptos.DataBind();
            }
        }

        protected void rep_conceptos_ItemDataBound(object sender, RepeaterItemEventArgs e)
        {
            EvaluacionConceptoDTO concepto = e.Item.DataItem as EvaluacionConceptoDTO;
            if (concepto != null)
            {
                HiddenField codigo = (HiddenField)e.Item.FindControl("hdf_codigoConcepto");
                Literal titulo = (Literal)e.Item.FindControl("lbl_tituloConcepto");
                RadioButtonList tildes = (RadioButtonList)e.Item.FindControl("rbl_tildes");
                codigo.Value = concepto.Codigo;
                titulo.Text = concepto.Nombre;
                tildes.SelectedValue = SrvProyecto.EvaluacionCalcularTilde(concepto.Puntaje).ToString();
            }
        }

        protected void rbl_tildes_SelectedIndexChanged(object sender, EventArgs e)
        {
            RadioButtonList rbl_tildes = (RadioButtonList)sender;
            RadioButtonList rbl_tildesglobales = (RadioButtonList)rbl_tildes.Parent.Parent.Parent.FindControl("rbl_tildesglobales");
            Repeater rep_conceptos = (Repeater)rbl_tildes.Parent.Parent.Parent.FindControl("rep_conceptos");

            IEnumerable<EvaluacionConceptoDTO> conceptos = ObtenerConceptos(rep_conceptos);
            int puntajeGlobal = SrvProyecto.EvaluacionCalcularPuntajeGlobal(conceptos);
            if (puntajeGlobal != 0)
            {
                rbl_tildesglobales.SelectedValue = SrvProyecto.EvaluacionCalcularTilde(puntajeGlobal).ToString();
            }
        }

        #endregion
    }
}
